/* 
    旋转数组
    给定一个数组，将数组中的元素向右移动k个位置，其中k为非负数
    输入[1, 2, 3, 4, 5, 6, 7] 和 k = 3
    输出[5, 6, 7, 1, 2, 3, 4]

    输入[-1, -100, 3, 99] 和 k = 2
    输出[3, 99, -1, -100]
*/

const rotateArray = (arr, k) => {
  // 如果k大于数组的长度，取模即可
  k = k % arr.length;

  // 所有元素向右移动k个位置，换种思维，从k位置开始，后面的元素移动到前面
  arr.unshift(...arr.splice(arr.length - k, k));
  return arr;
};

// console.log(rotateArray([1, 2, 3, 4, 5, 6, 7], 4));

// 优化
const rotateArray1 = (arr, k) => {
  k = k % arr.length;
  // 如果k移动的位置大于数组的一半，理解成向左移动，这样移动次数少
  //（k = 6，常规思路：每个元素要向右移动6位），变向思路：每个向做移动length - k个位置
  if (k >= arr.length / 2) {
    arr.push(...arr.splice(0, arr.length - k));
  } else {
    arr.unshift(...arr.splice(arr.length - k, k));
  }
  return arr;
};
console.log(rotateArray1([1, 2, 3, 4, 5, 6, 7], 6));
